#ifndef __MODULE_QUEUE_COMM_H__
#define __MODULE_QUEUE_COMM_H__

typedef enum manager_tasks_identification
{
    GATEWAY_MODULE_DEFAULT = 0,  // 默认值
    GATEWAY_MANAGER_MODULE,      // 网关业务逻辑管理任务标识
    WIOTA_APP_MODULE,            // WIoTa应用任务标识
    NET_APP_MODULE,              // 网络任务标识
    MANAGER_WEB_MODULE,          // WEB管理任务标识
    LED_MANAGER_MODULE,          // LED管理任务标识
    SERIAL_MANAGER_MODLE,        // 串口管理任务标识
    SERIAL_DEBUG_MANAGER_MODULE, // 串口调试管理任务标识
    SERIAL_485_MANAGER_MODULE,   // 485管理任务标识
    SERIAL_UART_MANAGER_MODULE,  // 普通串口管理任务标识
    BT_MANAGER_MODULE,           // BT管理任务标识
    AUDIO_APP_MODULE,            // 音频管理任务标识
    NET_CHANGE_APP_MODULE,       // 网络切换任务标识
} manager_tasks_identification_e;

// 应用模块之间队列通信的所有命令
typedef enum GATEWAY_INTERACTION_CMD
{
    GATEWAY_MANAGER_DEFALT_CMD = 0x1, /**< 下面是网关业务逻辑管理任务的队列命令 */
    // from self
    GATEWAY_REBOOT, /**< 网关重启 */
    // from WIoTa
    WIOTA_START = 0x0100, /**< WIoTa启动完成命令 */
    WIOTA_RECV_DATA,      /**< 接收到WIoTa上行短消息命令 */
    WIOTA_ABNORMAL_EXIT,  /**< WIoTa退出命令，一般为异常退出 */
    WIOTA_ROLL_CALL,      /**< WIoTa定时点名消息处理 */
    WIOTA_STATUS_REPORT,  /**< WIoTa上报状态消息 */
    AUTH_INFO_CHANGE,     /**< 网关鉴权信息改变命令 */

    SERIAL_INIT_FINISH, /**< 485/uart/bt初始化完成.运行系统切换log */
    // from net、web、serial、serial debug或BT
    WIOTA_SEND_DATA,          /**< 发送给WIoTa的下行透传数据命令 */
    OTA_UPGRADE_REQUEST,      /**< 发起的OTA升级请求，一般由网络下发 */
    OTA_UPGRADE_RESPONSE,     /**< OTA升级请求响应，收到该命令表示OTA升级包已下载完成，可进行升级流程 */
    OTA_UPGRADE_DATA_SENDING, /**< 终端OTA升级包发送，收到OTA_UPGRADE_RESPONSE消息后，将定时触发该命令 */
    OTA_UPGRADE_COMPLETE,     /**< OTA升级完成，当OTA发送结束超时定时器超时时触发该命令 */
    // 以下为配置相关命令
    WIOAT_VERSION_GET = 0x0500, /**< 获取WIoTa版本 */
    WIOTA_SYS_CFG_GET,          /**< 获取WIoTa子网配置 */
    WIOTA_SYS_CFG_SET,          /**< 设置WIoTa子网配置 */
    WIOTA_ACT_CFG_GET,          /**< 获取WIoTa连接态时间配置 */
    WIOTA_ACT_CFG_SET,          /**< 设置WIoTa连接态时间配置 */
    WIOTA_FREQ_CFG_GET,         /**< 获取WIoTa频点列表 */
    WIOTA_FREQ_CFG_SET,         /**< 设置WIoTa频点列表 */
    WIOTA_POWER_CFG_GET,        /**< 获取WIoTa发射功率 */
    WIOTA_POWER_CFG_SET,        /**< 设置WIoTa发射功率 */
    WIOTA_RATE_CFG_GET,         /**< 获取WIoTa MCS配置 */
    WIOTA_RATE_CFG_SET,         /**< 设置WIoTa MCS配置 */
    WIOTA_PAGING_TX_CFG_GET,    /**< 获取WIoTa低功耗唤醒配置(paging tx) */
    WIOTA_PAGING_TX_CFG_SET,    /**< 设置WIoTa低功耗唤醒配置(paging tx) */
    WIOTA_SYNC_PAGING_CFG_GET,  /**< 获取WIoTa低功耗唤醒配置(sync paging) */
    WIOTA_SYNC_PAGING_CFG_SET,  /**< 设置WIoTa低功耗唤醒配置(sync paging) */
    WIOTA_TS_CFG_GET,           /**< 获取WIoTa同步授时配置 */
    WIOTA_TS_CFG_SET,           /**< 设置WIoTa同步授时配置 */
#ifdef WIOTA_SUBF_MODE_SUPPORT  //
    WIOTA_SUBF_MODE_CFG_GET,    /**< 获取WIoTa子帧模式配置 */
    WIOTA_SUBF_MODE_CFG_SET,    /**< 设置WIoTa子帧模式配置 */
#endif                          //
    GATEWAY_BASE_CFG_GET,       /**< 获取网关基础信息配置*/
    GATEWAY_BASE_CFG_SET,       /**< 设置网关基础信息配置*/
    ID_MANAGER_CFG_GET,         /**< 获取WIoTa分配地址配置 */
    ID_MANAGER_CFG_SET,         /**< 设置WIoTa分配地址配置 */
    AUTH_CFG_GET,               /**< 获取认证配置 */
    AUTH_CFG_SET,               /**< 设置认证配置 */
    NET_CFG_GET,                /**< 获取网络配置，所有网络配置（netif wifi cat1），仅用于远程配置查询，本地查询不支持 */
    NET_POLICY_CFG_GET,         /**< 获取网卡策略配置 */
    NET_POLICY_CFG_SET,         /**< 设置网卡策略配置 */
    NET_IF_CFG_GET,             /**< 获取网口配置 */
    NET_IF_CFG_SET,             /**< 设置网口配置 */
    WIFI_CFG_GET,               /**< 获取wifi配置 */
    WIFI_CFG_SET,               /**< 设置wifi配置 */
    CAT1_CFG_GET,               /**< 获取cat1配置 */
    CAT1_CFG_SET,               /**< 设置cat1配置 */
    BT_CFG_GET,                 /**< 获取蓝牙配置 */
    BT_CFG_SET,                 /**< 设置蓝牙配置 */
    MQTT_SERVER_CFG_GET,        /**< 获取MQTT配置 */
    MQTT_SERVER_CFG_SET,        /**< 设置MQTT配置 */
    DATA_CFG_GET,               /**< 获取上下行数据编码配置 */
    DATA_CFG_SET,               /**< 设置上下行数据编码配置 */
    WATCHDOG_CFG_GET,           /**< 获取看门狗配置 */
    WATCHDOG_CFG_SET,           /**< 设置看门狗配置 */
    GATEWAY_FTP_LOG_CFG_GET,    /**< 获取网关FTP LOG配置 */
    GATEWAY_FTP_LOG_CFG_SET,    /**< 设置网关FTP LOG配置 */
    LOG_SWITCH_CFG_GET,         /**< 获取LOG口切换配置 */
    LOG_SWITCH_CFG_SET,         /**< 设置LOG口切换配置 */
    UART_485_CFG_GET,           /**< 获取485串口配置 */
    UART_485_CFG_SET,           /**< 设置485串口配置 */
    SLOT_SEND_CFG_GET,          /**< 获取分时发送配置 */
    SLOT_SEND_CFG_SET,          /**< 设置分时发送配置 */
    RESET_FACTORY,              /**< 静态数据恢复出厂设置 */
    ALL_CFG_GET,                /**< 获取所有配置信息（网关、WIoTa、分支发送）*/
    UBOOT_CFG_GET,              /**< 获取uboot配置 */
    UBOOT_CFG_SET,              /**< 设置uboot配置 */
    IMMEDIATE_EFFECTIVE_GET,    /**< 获取参数立即生效标志 */
    IMMEDIATE_EFFECTIVE_SET,    /**< 设置参数立即生效标志 */
    FACTORY_TEST_RESULT_GET,    /**< 获取工厂测试结果 */
    GATEWAY_TIMED_CFG_GET,      /**< 网关定时配置 */
    GATEWAY_TIMED_CFG_SET,      /**< 网关定时配置 */
    MSH_CMD_EXEC,               /**< 终端执行MSH命令 */
    SYNC_CFG_GET,               /**< 获取同步助手配置 */
    SYNC_CFG_SET,               /**< 设置同步助手配置 */
    GATEWAY_AUTH_LIST_GET,      /**< 获取网关鉴权列表，只支持网络端查询 */
    GATEWAY_SCAN_FREQ_REQ,      /**< 网关扫描频点请求，并将结果返回，只支持网络操作 */
    GATEWAY_SCAN_FREQ_STOP,     /**< 网关扫描频点停止，只支持网络操作 */
    SYNC_DYNAMICS_INFO_GET,     /**< 获取同步助手动态信息 */

    WIOTA_APP_DEFAULT_CMD = 0x1000, /**< 下面是WIoTa应用任务的队列命令 */
    // from manager, WIoTa dl
    WIOTA_APP_AUTH_RES,           /**< WIoTa 发送鉴权响应，单独处理，新增需求逻辑 */
    WIOTA_APP_MSG,                /**< WIoTa 单播发送命令，带回调处理逻辑 */
    WIOTA_APP_SEND_ROLL_CALL,     /**< WIoTa 单播发送点名空包，回调统计成功和失败计数 */
    WIOTA_APP_SEND_BC,            /**< WIoTa 广播发送命令 */
    WIOTA_APP_SEND_OTA,           /**< WIoTa OTA发送命令 */
    WIOTA_APP_SEND_BC_AUTH_TS,    /**< WIoTa广播发送鉴权时隙消息 */
    WIOTA_APP_ADD_SUBF_DATA,      /**< WIoTa 添加下行子帧数据，语音传输专用 */
    WIOTA_APP_PAGING_TX,          /**< WIoTa paging tx空中唤醒命令 */
    WIOTA_APP_SYNC_PAGING,        /**< WIoTa sync paging空中唤醒命令 */
    WIOTA_APP_RS_SM_BY_FN,        /**< WIoTa 安排定帧接收发送任务 */
    WIOTA_APP_SUBF_MODE,          /**< WIoTa 进入连续子帧接收模式命令 */
    WIOTA_APP_CHECK_STATE,        /**< WIoTa 状态检查命令 */
    WIOTA_APP_TIMEOUT_DATA_CHECK, /**< WIoTa 状态检查命令 */
    WIOTA_APP_OTA_UPGRADE,        /**< WIoTa APP接收到即将进行OTA操作的命令 */
    WIOTA_APP_RESTART,            /**< WIoTa APP线程重启 */

    NETDEV_CHANGE_CMD = 0x1500,

    NET_APP_DEFAULT_CMD = 0x2000, /**< 下面是网络任务的队列命令 */
    // from manager or self
    NET_IOTE_VERSION_VERIFY,  /**< 终端版本验证消息 */
    NET_IOTE_STATE_UPDATE,    /**< 终端状态更新消息 */
    NET_IOTE_VERSION_RES,     /**< 终端版本查询响应消息 */
    NET_IOTE_USER_DATA,       /**< 终端上行数据消息 */
    NET_MQTT_STATE_CHANGED,   /**< MQTT状态改变消息 */
    NET_MQTT_RECV_MESSAGE,    /**< 接收到MQTT服务器下行消息 */
    NET_OTA_DOWNLOAD_REQUEST, /**< OTA升级下行请求消息 */
    NET_OTA_UPGRADE_COMPLETE, /**< 终端OTA升级完成消息 */

    NET_SEND_TRANSPARENT_DATA, /**< 发送透传数据 */
    NET_RECV_TRANSPARENT_DATA, /**< 接收透传数据 */

    ONLINE_DEVICE_GET, /**< 获取在线设备列表 */
    DEVICE_STATUS_GET, /**< 获取设备状态 */
    GATEWAY_TIME_GET,  /**< 获取网关时间 */

    LED_MANAGER_CMD = 0x5000, /**< LED控制命令 */

    SERIAL_RECV_DATA = 0x6000, /**< 以下是串口接收数据命令 */

    AUDIO_DATA_RECV = 0x7000, /**< 音频上行数据 */
} gateway_interaction_cmd_e;

typedef struct module_queue_message
{
    manager_tasks_identification_e src_task;  // 发送消息的模块。用于消息的转发和回溯。
    manager_tasks_identification_e dest_task; // 目的模块
    gateway_interaction_cmd_e cmd;            // 消息的命令
    void *data;                               // 消息数据
} module_queue_message_t;

#endif
